#include "random_words.h"

/*
 * Cria e retorna um vetor de com WORDS_PER_NODE palavras de 2 a 5 caracteres
 *	gerados aleatoriamente.
 */
char **generateWord(char **vector) {
	unsigned short int tamanho; /* tamanho da palavra gerado aleatoriamente */
	int i, words = 0;
	int geraCh; /* inteiro que armazena o código ascii do caracter gerado aleatoriamente */

	do {
		srand(time(NULL) * rand());
		tamanho = 2 + rand() % 5; /* gera o tamanho da palavra aleatoriamente entre 2 e 5 */
		for(i = 0; i < tamanho; i++){
			geraCh = 97 + rand() % 25; /* gera caracteres aleatoriamente - códigos 97 a 122 da tabela ASCII */
			vector[words][i] = geraCh;
		}
		vector[words][tamanho] = '\0';
		words++;
	} while (words < WORDS_PER_NODE);

	return vector;
}

/*
 * Recebe o mapa de palavras menores e o mapa de palavras maiores e tenta gerar este último
 *	pela combinação aleatória de palavras do primeiro.
 */
int searchBigWords(map<string, int> *small_words, map<string, int> *big_words_to_find) {
	int pos1, pos2, i = 0, count = 0;
	string str1, str2, word;
	map<string, int>::iterator it;

	do {
		srand(time(NULL) * rand());

		/* gera dois números aleatórios correspondente ao mapeamento das palavras menores */
		pos1 = rand() % small_words->size();
		pos2 = rand() % small_words->size();

		/* procura pela palavra correspondente a estes dois números */
		for (it = small_words->begin(); it != small_words->end(); it++)
			if (it->second == pos1)
				str1 = it->first;
			else if (it->second == pos2)
				str2 = it->first;

		word = str1 + str2; /* concatena as duas palavras */

		/* verifica se a palavra gerada é válida */
		it = big_words_to_find->find(word);
		if (it != big_words_to_find->end()) {
			big_words_to_find->erase(it);
			count++;
		}

		i++;
	} while (i < WORDS_PER_NODE);

	return count;
}

